package com.sdcqjy.property.utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.target.Target;
import com.sdcqjy.mylibrary.Logger;
import com.sdcqjy.property.R;
import com.sdcqjy.property.base.BaseService;

import java.io.File;
import java.util.WeakHashMap;

public class GlideUtils {
    private static WeakHashMap<View, String> viewOfImg;
    private static final int errRes = R.drawable.ic_app_launcher;

    static {
        viewOfImg = new WeakHashMap<>();
    }

    public static void displayOfUrl(Context context, ImageView imgView, String url) {
        Logger.v("---显示图像地址---", url);
        if (TextUtils.isEmpty(url)) {
            imgView.setImageResource(errRes);
            return;
        }
        if (!url.contains("://"))
            url = BaseService.ImgURL + url;
        String urlTmp = viewOfImg.get(imgView);
        if (url.equals(urlTmp)) return;
        viewOfImg.put(imgView, url);
        Glide.with(context).
                load(url).
                asBitmap(). //强制处理为bitmap
                error(errRes).//加载失败时显示的图片
                //placeholder(R.raw.img_lodeing).//加载中显示的图片
//                error(R.drawable.bg_error).//加载失败时显示的图片
//                crossFade().//淡入显示,注意:如果设置了这个,则必须要去掉asBitmap
//                crossFade(1000).//淡入显示的时间,注意:如果设置了这个,则必须要去掉asBitmap
//                override(80,80).//设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高
//                centerCrop().//中心裁剪,缩放填充至整个ImageView
//                skipMemoryCache(true).//跳过内存缓存
//                thumbnail(0.1f).//10%的原图大小
        diskCacheStrategy(DiskCacheStrategy.SOURCE).//保存最终图片
                into(imgView);//显示到目标View中
    }

    public static void removeView(ImageView imgView) {
        viewOfImg.remove(imgView);
    }

    /**
     * 谨慎，不要使用这个加载大图
     */
    public static void displayOfFile(ImageView imgView, File file) {
        if (file != null && file.exists()) {
            Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
            imgView.setImageBitmap(bitmap);
            viewOfImg.remove(imgView);
        }
    }

    public static void displayOfFile(Context context, ImageView imgView, File file) {
        if (file != null && file.exists()) {
            Glide.with(context).load(file).asBitmap().into(imgView);
            viewOfImg.remove(imgView);
//            Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
//            imgView.setImageBitmap(bitmap);
        }
    }

    //加载本地视频第一帧
    public void displayOfVideo(Context context, ImageView imgView, String file) {
        Glide.with(context).load(file).into(imgView);
        viewOfImg.remove(imgView);
    }

    public static void displayOfUrl(Context context, ImageView imgView, String url, int errId) {
        Logger.v("---显示图像地址---", url);
        if (TextUtils.isEmpty(url)) {
            imgView.setImageResource(errId);
            return;
        }
        if (!url.contains("://"))
            url = BaseService.ImgURL + url;
        String urlTmp = viewOfImg.get(imgView);
        if (url.equals(urlTmp)) return;
        viewOfImg.put(imgView, url);
        Glide.with(context).
                load(url).
                asBitmap().
                error(errId).//加载失败时显示的图片
                diskCacheStrategy(DiskCacheStrategy.SOURCE).//保存最终图片
                into(imgView);//显示到目标View中
    }

    public static Bitmap loadImageSync(Context context, String url) {
        Logger.v("---加载图像---", url);
        if (TextUtils.isEmpty(url)) return null;
        if (!url.contains("://"))
            url = BaseService.ImgURL + url;
        try {
            return Glide.with(context)
                    .load(url)
                    .asBitmap()
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
                    .get();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Bitmap loadImageSyncOver(Context context, String url) {
        Logger.v("---加载图像---", url);
        if (TextUtils.isEmpty(url)) return null;
        if (!url.contains("://"))
            url = BaseService.ImgURL + url;
        try {
            Bitmap myBitmap = Glide.with(context).load(url)
                    .asBitmap().centerCrop().diskCacheStrategy(DiskCacheStrategy.SOURCE)
                    .into(100, 100).get();
            return myBitmap;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

//    public static void downloadImageSync(Context context, String url) {
//        Logger.v("---下载图像---", url);
//        if (TitleUtils.isEmpty(url)) return;
//        if (!url.contains("://"))
//            url = BaseService.ImgURL + url;
//        Glide.with(context).load(url).downloadOnly(new DownloadImageTarget());
//    }
    //gif慎用
//    public static void displayOfGif(Context context, ImageView imgView, File file) {
//        if (file.exists()) {
//            Glide.with(context).
//                    load(file).
//                    asGif().
//                    into(imgView);
//        }
//    }
}
